package mq

import (
	"time"
)

type Option struct {
}

type MessageHeader map[string]string

type Message struct {
	Offset int64
	Body   []byte
	Header map[string]string
	Commit func()
}

type ConfirmFunc func() // 确认消息已消费

type MessageHandler func(*Message)

type MessageQueue interface {
	// 推送消息
	// msg 消息体
	// header 消息头
	// delay 延迟推送时间
	PushJson(msg interface{}, header MessageHeader, delay ...time.Duration) error

	// 轮询消息
	// handler 用于处理消息的方法
	// notAutoConfirm 默认为自动确认，将此参数设置为true，可以实现非自动确认,需要通过调用Message.Commit()来显式确认
	PollMessage(handler MessageHandler, notAutoConfirm ...bool) error

	// PullJson(msg interface{}) (ok bool, header MessageHeader, confirmFunc ConfirmFunc, err error)

	// 设置拉取消息超时时间
	SetReceiveTimeOut(timeout time.Duration)

	// 关闭客户端
	Close() error
}
